package com.upb.webserver.common.pojo.rest.fisco.chainmgr.req;

import java.util.List;
import java.util.Set;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

import com.upb.webserver.common.enums.DockerImageTypeEnum;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 */
@Data
@NoArgsConstructor
public class ReqDeployFiscoChain {
    /**
     * Chain id，由 WebServer 生成，不能为空
     */
    private int chainId;

    /**
     * Docker 镜像版本，比如: v2.5.0
     */
    @NotBlank(message = "Image tag version error.")
    private String version;

    @NotBlank(message = "chain name.")
    private String chainName;

    /**
     * 部署的主机信息列表
     */
    private List<DeployHost> deployHostList;

    /**
     * 加密方式：0，非过密；1，国密
     */
    private int encryptType = 0;

    /**
     * 镜像拉取方式，默认 0 ：
     *  0 : 手动拉取
     *  1 : 官方自动拉取
     *  2 : 本地镜像 tar 包
     *  3 : CDN 自动下载
     */
    private byte dockerImageType = DockerImageTypeEnum.DOWNLOAD_CDN.getId();

    /**
     * 字符串
     */
    private String consensusType = "pbft";

    /**
     * 字符串
     */
    private String storageType = "rocksdb";

    /**
     * 链描述
     */
    private String description;

    @Data
    @NoArgsConstructor
    public static class DeployHost {

        /**
         * 主机所属公司 ID
         */
        private int extCompanyId;

        /**
         * 主机所属机构 ID
         */
        private int extOrgId;

        /**
         * 主机在 WebServer 中的 ID.
         */
        private int extHostId;

        /**
         * 主机 ID 地址
         */
        private String ip;

        /**
         * 主机免密登录账号
         */
        private String sshUser="root";

        /**
         * 主机 SSH 端口
         */
        private int sshPort=22;

        /**
         *  主机上部署节点数量，默认 1
         */
        private int num = 1;

        /**
         *  主机存放节点数据目录
         */
        private String rootDirOnHost = "/root/fisco";

        /**
         * JSON-RPC 起始端口,默认8545
         */
        private int jsonrpcPort = 8545;

        /**
         * P2P 起始端口,默认30300
         */
        private int p2pPort = 30300;

        /**
         * Channel 起始端口,默认20200
         */
        private int channelPort = 20200;

        /**
         * Front 起始端口,默认5002
         */
        private int frontPort = 5002;
    }
}

